home *** CD-ROM | disk | FTP | other *** search
/ Aminet 4 / Aminet 4 - November 1994.iso / aminet / comm / misc / amicom1_0a.lha / AMICOM.OPL next >
Text File  |  1994-04-11  |  5KB  |  239 lines

  1. PROC main:
  2.     GLOBAL cmdline$(255),com$(8),arg$(255)
  3.     GLOBAL devh%, fileh%, ret%, t%, currdir$(255), d%(6)
  4.     initlink:
  5.     setline:
  6.     rem put in background
  7.     call($c78d,100,0,0,0,0)
  8.     currdir$=parse$("","",d%())
  9.     do
  10.         cmdline$=getline$:
  11.         t%=loc(cmdline$," ")
  12.         if t%>0
  13.             com$=left$(cmdline$,loc(cmdline$," ")-1)
  14.             arg$=right$(cmdline$,len(cmdline$)-len(com$)-1)
  15.         else
  16.             com$=cmdline$
  17.             arg$=""
  18.         endif
  19.         ret%=do:(com$,arg$)
  20.     until ret%=1
  21.     shutdown:
  22. ENDP
  23.  
  24. PROC do:(com$,arg$)
  25.     local d$(255),d%(6)
  26.     onerr error
  27.     if com$="LS"
  28.         if arg$=""
  29.             d$=dir$(currdir$)
  30.         else
  31.             d$=dir$(arg$)
  32.         endif
  33.         while d$<>""
  34.             sendline:(d$)
  35.             d$=dir$("")
  36.         endwh
  37.         sendline:("")
  38.     elseif com$="QUIT"
  39.         return(1)
  40.     elseif com$="CD"
  41.         currdir$=parse$("",arg$,d%())
  42.         if right$(currdir$,1)<>"\"
  43.             currdir$=currdir$+"\"
  44.         endif
  45.         setpath currdir$
  46.         sendline:(currdir$)
  47.     elseif com$="RM" or com$="RMDIR"
  48.         d$=parse$(arg$,"",d%())
  49.         if com$="RM"
  50.             trap delete d$
  51.         else
  52.             trap rmdir d$
  53.         endif
  54.         if err<>0
  55.             sendline:(err$(err))
  56.         else
  57.             sendline:(d$+" deleted.")
  58.         endif
  59.     elseif com$="MKDIR"
  60.         d$=parse$(arg$,"",d%())
  61.         trap mkdir d$
  62.         if err<>0
  63.             sendline:(err$(err))
  64.         else
  65.             sendline:(d$+" created.")
  66.         endif
  67.     elseif com$="GET"
  68.         sendfile:(arg$,0)
  69.     elseif com$="PUT"
  70.         getfile:(arg$,0)
  71.     elseif com$="TGET"
  72.         sendfile:(arg$,1)
  73.     elseif com$="TPUT"
  74.         getfile:(arg$,1)
  75.     elseif com$="INFO"
  76.         sendline:(getsize$:(arg$))
  77.     else
  78.         sendline:("Unrecognised command, "+com$)
  79.     endif
  80.     return(0)
  81.     error::
  82.     onerr off
  83.     if err<=-32 and err>=-69
  84.         sendline:(err$(err))
  85.         if com$="LS"
  86.             sendline:("")
  87.         endif
  88.     else
  89.         sendline:(err$(err)+", disconnected.")
  90.         print err$(err)
  91.         print "Press any key."
  92.         get
  93.         shutdown:
  94.     endif
  95.     return(0)
  96. ENDP
  97.  
  98. PROC getline$:
  99.     LOCAL ret%,tmp$(255)
  100.     ret%=ioread(devh%,addr(tmp$),1)
  101.     if ret%<>1
  102.         print "Error getting input"
  103.         shutdown:
  104.     endif
  105.     if peekb(addr(tmp$))>0
  106.         ret%=ioread(devh%,addr(tmp$)+1,peekb(addr(tmp$)))
  107.         if ret%<>peekb(addr(tmp$))
  108.             print "Error getting input"
  109.             shutdown:
  110.         endif
  111.     else
  112.         tmp$=""
  113.     endif
  114.     return tmp$
  115. ENDP
  116.  
  117. PROC sendline:(msg$)
  118.     LOCAL t$(255),len%, ret%
  119.     t$ = msg$
  120.     len% = LEN(t$)
  121.     ONERR PUTERR::
  122.     ret%=IOWRITE(devh%, ADDR(t$), len%+1)
  123.     ONERR OFF
  124.     IF ret% < 0
  125.         RAISE ERR
  126.     ENDIF
  127.     RETURN
  128.     PUTERR::
  129.     ONERR OFF
  130.     PRINT "Error sending ";ERR$(ERR)
  131.     GET
  132.     shutdown:
  133.     STOP
  134. ENDP
  135.  
  136. PROC sendfile:(file$,type%)
  137.     local fileh%,ret%,buf$(255)
  138.     ret%=ioopen(fileh%,file$,$0400+$20*type%)
  139.     if ret%<0
  140.         sendline:(err$(ret%)+": "+file$)
  141.     else
  142.         sendline:("SENDING")
  143.         ret%=ioread(fileh%,addr(buf$)+1,255)
  144.         while ret%>0
  145.             pokeb addr(buf$),ret%
  146.             sendline:(buf$)
  147.             ret%=ioread(fileh%,addr(buf$)+1,255)
  148.         endwh
  149.         if ret%<0 and ret%<>-36
  150.             sendline:("")
  151.             sendline:(err$(ret%))
  152.             return
  153.         endif
  154.         sendline:("")
  155.         sendline:("Transfer OK")
  156.         ret%=ioclose(fileh%)
  157.     endif
  158. endp
  159.  
  160. PROC getfile:(file$,type%)
  161.     local fileh%,ret%,buf$(255)
  162.     ret%=ioopen(fileh%,file$,$0102+$20*type%)
  163.     pause 40
  164.     if ret%<0
  165.         sendline:(err$(ret%)+": "+file$)
  166.     else
  167.         sendline:("RECEIVING")
  168.         buf$=getline$:
  169.         while buf$<>""
  170.             ret%=iowrite(fileh%,addr(buf$)+1,len(buf$))
  171.             if ret%<0
  172.                 do
  173.                     buf$=getline$:
  174.                 until buf$=""
  175.                 sendline:(err$(ret%))
  176.                 ret%=ioclose(fileh%)
  177.                 return
  178.             endif
  179.             buf$=getline$:
  180.         endwh
  181.         sendline:("Transfer OK")
  182.         ret%=ioclose(fileh%)
  183.     endif
  184. endp
  185.  
  186. proc getsize$:(file$)
  187.     local fileh%,ret%,offset&,ret2%
  188.     ret%=ioopen(fileh%,file$,$0403)
  189.     if ret%=0
  190.         offset&=0
  191.         ret%=ioseek(fileh%,2,offset&)
  192.         if ret%=0
  193.             return gen$(offset&,10)
  194.         endif
  195.         ret2%=ioclose(fileh%)
  196.     endif
  197.     return err$(ret%)
  198. endp
  199.  
  200. PROC initlink:
  201.     LOCAL ret%
  202.     ONERR linkerr::
  203.     ret%= IOOPEN(devh%, "TTY:A", $0000)
  204.     IF ret% <> 0
  205.         PRINT "Error ";ret%;" Raised"
  206.         RAISE ERR
  207.     ENDIF
  208.     ONERR OFF
  209.     RETURN
  210.     linkerr::
  211.     PRINT "Error ";ret%;ERR$(ret%);" in initing link"
  212.     GET
  213.     STOP
  214. ENDP
  215.  
  216. PROC setline:
  217.     REM - 9600 baud, no parity, 8 data bits
  218.     REM 1 stop bit rts/cts flow contol
  219.     rsset:(15,0,8,1,8)
  220. ENDP
  221.  
  222. PROC rsset:(baud%, parity%, data%, stop%, hand%)
  223.     LOCAL frame%, srchr%(6), dummy%, err%
  224.     frame%=data%-5
  225.     IF stop%=2:frame%=frame% OR 16:ENDIF
  226.     IF parity% :frame%=frame% OR 32 :ENDIF
  227.     srchr%(1) = baud% OR (baud% * 256)
  228.     srchr%(2) = frame% OR (parity%*256)
  229.     srchr%(3) = (hand% AND 255) OR $1100
  230.     srchr%(4) = $13
  231.     err%=IOW(devh%,7,srchr%(1),dummy%)
  232.     IF err% : RAISE err% : ENDIF
  233. ENDP
  234.  
  235. PROC shutdown:
  236.     LOCAL ret%
  237.     ret%=IOCLOSE(devh%)
  238. ENDP
  239.